package model

import (
	"fmt"
	"gitee.com/liumou_site/logger"

	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
	"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
	dnspod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod/v20210323"
)

// Add 方法用于向腾讯云DNS服务添加一条新的解析记录。
// 该方法会实例化一个认证对象，并使用提供的SecretId和SecretKey进行身份验证。
// 然后，它会创建一个请求对象，设置必要的参数（如域名、记录类型、IP地址等），
// 并通过腾讯云SDK发送请求以添加记录。
// 如果请求成功，将输出成功信息；如果失败，将记录错误日志并可能触发panic。
func (l *Login) Add(ip string) {
	// 实例化一个认证对象，使用腾讯云账户的SecretId和SecretKey进行身份验证。
	// 注意：密钥对需要保密，泄露可能导致账号资源的安全性受到威胁。
	credential := common.NewCredential(
		l.Domain.Login.Id,
		l.Domain.Login.Key,
	)

	// 实例化一个客户端配置对象，设置API的终端地址。
	cpf := profile.NewClientProfile()
	cpf.HttpProfile.Endpoint = "dnspod.tencentcloudapi.com"

	// 实例化一个DNS客户端对象，用于与腾讯云DNS服务进行交互。
	client, _ := dnspod.NewClient(credential, "", cpf)

	// 实例化一个创建记录的请求对象，并设置相关参数。
	request := dnspod.NewCreateRecordRequest()
	request.Domain = common.StringPtr(l.Domain.Domain.Domain)
	request.RecordType = common.StringPtr(l.IPS.IpType)
	request.RecordLine = common.StringPtr("默认")
	request.Value = common.StringPtr(ip)
	l.Domain.Domain.Sub = l.Domain.Domain.Sub6
	if l.IPS.IpType == "A" {
		l.Domain.Domain.Sub = l.Domain.Domain.Sub4
	}
	l.Url = fmt.Sprintf("%s.%s", l.Domain.Domain.Sub, l.Domain.Domain.Domain)
	request.SubDomain = common.StringPtr(l.Domain.Domain.Sub)

	request.TTL = common.Uint64Ptr(600)
	request.Weight = common.Uint64Ptr(0)
	request.Remark = common.StringPtr(l.Domain.Domain.Remark)

	// 发送请求以创建DNS记录，并处理响应。
	response, err := client.CreateRecord(request)
	if _, ok := err.(*errors.TencentCloudSDKError); ok {
		fmt.Println(l.Url, " -> ", ip)
		logger.Error("提交失败: ", err.Error())
		logger.Debug("当前设置类型: ", l.IPS.IpType)
		logger.Debug("当前域名: ", l.Domain.Domain.Domain)
		logger.Debug("当前子域名: ", l.Domain.Domain.Sub)
		logger.Debug("当前IP: ", ip)
		logger.Debug("登录信息: ", l.Domain.Login)
		logger.Debug("域名信息: ", l.Domain.Domain)
		logger.Debug("当前URL: ", l.Url)
		return
	}
	if err != nil {
		logger.Error(response.ToJsonString())
		panic(err)
	}

	// 输出成功信息，并记录日志。
	fmt.Println(l.Domain.Domain.Sub, " -> ", ip)
	logger.Info("记录添加成功: ", response.ToJsonString())
}
